package com.own.demo.lwf.common.Json;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.own.demo.lwf.entity.BatchDevInDto;

import java.util.List;

/**
 * @version v1.0
 * @Description:java练习
 * @Author 李文峰
 * @Date 2023/7/21 0021 22:55
 */
public class toJsonUtil {
    public static void main(String[] args) throws JsonProcessingException {
        String devInfoList = "[{'devId':'869718026017001','cabinetId':17,'devType':13,'devTypeStr':'XXX','devName':'XALTE_2003A','cabinetNo':1,'cabinetDoorNo':3}]";
        List<BatchDevInDto> batchDevInDtoList = JSONObject.parseArray(devInfoList, BatchDevInDto.class);
        System.out.println(toJsonUseGson(batchDevInDtoList));
        System.out.println(toJsonUseJackson(batchDevInDtoList));
        System.out.println(toJsonUseGsonBuilder(batchDevInDtoList));
        System.out.println(toJsonUseJSON(batchDevInDtoList));
        System.out.println(toJsonUseJSON("张三", "李四", "王五"));
    }

    // 1.使用Gson库：
    // 这种方式需要导入Gson库，但是使用简单，可以将任何Java对象转为Json格式。
    public static String toJsonUseGson(Object object) {
        Gson gson = new Gson();
        String json1 = gson.toJson(object);
        return "Gson库转json:" + "\n" + json1;
    }

    // 2.使用Jackson库：
    // Jackson库是常用的Java转Json库，比Gson更加灵活。
    public static String toJsonUseJackson(Object object) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        String json2 = mapper.writeValueAsString(object);
        return "Jackson库转json:" + "\n" + json2;
    }

    // 3.使用JSON库：
    // JSON库是一个常用的Java Json工具，可以将Java对象，List, Map等数据类型转换为Json格式的数据。
    public static String toJsonUseGsonBuilder(Object object) {
        String json3 = JSON.toJSONString(object);
        return "JSON库是转json:" + "\n" + json3;
    }

    // 4.GsonBuilder转json
    // 输出有格式更美观
    public static String toJsonUseJSON(Object object) {
        String json4 = new GsonBuilder().setPrettyPrinting().create().toJson(object);
        return "GsonBuilder转json:" + "\n" + json4;
    }

    // 5.手写转换：
    // 手写的方式需要自己实现转换的过程，比较繁琐。但是能够更灵活地控制Json数据的生成。
    public static String toJsonUseJSON(Object value1, Object value2, Object value3) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("key1", value1);
        jsonObject.put("key2", value2);
        jsonObject.put("key2", value3);
        String json5 = jsonObject.toString();
        return "手写的方式转json:" + "\n" + json5;
    }
}

